package read;

import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import jpadao.EscolaJPADAO;
import jpadao.MunicipioJPADAO;
import jpadao.UnidadeFederativaJPADAO;

import model.Escola;
import model.EstruturaApoioDeficiente;
import model.EstruturaFisica;
import model.Municipio;
import model.Recurso;
import model.UnidadeFederativa;

import org.primefaces.model.UploadedFile;

import dao.EscolaDAO;
import dao.MunicipioDAO;
import dao.UnidadeFederativaDAO;

public class LerCSV {

	private Scanner sc;
	private UnidadeFederativa uf;
	private Municipio m;
	private Recurso r;
	private EstruturaApoioDeficiente eAD;
	private EstruturaFisica ef;
	private Escola e;

	public LerCSV() {
		this.uf = new UnidadeFederativa();
		this.m = new Municipio();
		this.r = new Recurso();
		this.eAD = new EstruturaApoioDeficiente();
		this.e = new Escola();
		this.ef = new EstruturaFisica();

	}

	public void ler(InputStream arquivo) {
		sc = new Scanner(arquivo);

		try {

			while (sc.hasNextLine()) {
				String[] l = sc.nextLine().split(";");
				if (l[25].equalsIgnoreCase("Em Atividade")) {
					this.uf = new UnidadeFederativa(convInt(l[9]),convString(l[10]), convString(l[8]));
					this.m = new Municipio(convInt(l[12]), convString(l[11]),this.uf);
					this.r = new Recurso(converter(l[108]), converter(l[116]), converter(l[117]), converter(l[118]), converter(l[110]));
					this.eAD = new EstruturaApoioDeficiente(converter(l[52]), converter(l[53]));
					this.ef = new EstruturaFisica(converter(l[56]), converter(l[57]), converter(l[58]), converter(l[59]), converter(l[62]), converter(l[63]), converter(l[64]), converter(l[71]), converter(l[72]), converter(l[82]));
					this.e = new Escola(convInt(l[1]), convString(l[2]), convString(l[3]), converter(l[87]), convString(l[26]), convString(l[27]), convString(l[15]), convString(l[18]), convDouble(l[16]), convData(l[28]), convData(l[29]), convInt(l[20]), convInt(l[21]), convString(l[24]), this.eAD, this.ef, this.r, this.m);
					inserir(this.e);

				}

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void inserir(Escola escola) {
		EscolaDAO escolaDAO = new EscolaJPADAO();
		escolaDAO.save(escola);
		FacesMessage msg = new FacesMessage("Arquivo enviado com Sucesso.");
		FacesContext.getCurrentInstance().addMessage(null, msg);

	}

	public boolean converter(String valor) {
		return valor.equalsIgnoreCase("Sim");
	}

	public String convString(String valor) {
		if (valor.equals(" ")) {

			return "";
		}
		return valor;
	}

	public int convInt(String x) {
		if (x.equals("")) {
			return 0;
		} else {
			return Integer.parseInt(x);
		}
	}
	public Double convDouble(String x) {
		if (x.equals("")) {
			return 0.0;
		} else {
			return Double.parseDouble(x);
		}
	}

	public Date convData(String valor) {
		DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
		Date data = null;
		try {
			data = (Date) formatter.parse(valor);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return data;
	}

}
